// 给定一个经过编码的字符串，返回它解码后的字符串。

// 编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

// 你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。

// 此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像 3a 或 2[4] 的输入。

// 示例 1：

// 输入：s = "3[a]2[bc]"
// 输出："aaabcbc"
// 示例 2：

// 输入：s = "3[a2[c]]"
// 输出："accaccacc"


/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function (s) {
    let stack = [];
    let currentNum = 0;
    let currentString = '';

    for (let i = 0; i < s.length; i++) {
        let char = s[i];

        if (!isNaN(char)) {
            // 如果是数字，更新 currentNum
            currentNum = currentNum * 10 + parseInt(char);
        } else if (char === '[') {
            // 将当前的数字和字符串压入栈中，重置 currentNum 和 currentString
            stack.push([currentNum, currentString]);
            currentNum = 0;
            currentString = '';
        } else if (char === ']') {
            // 弹出栈顶的数字和字符串，更新 currentString
            let [num, prevString] = stack.pop();
            currentString = prevString + currentString.repeat(num);
        } else {
            // 如果是字母，将其添加到当前字符串
            currentString += char;
        }
    }

    return currentString;
};

const s = "3[a2[c]]";
decodeString(s);